#include<stdio.h>
#include<iostream>
#include <signal.h>
#include<unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <cstddef>


using namespace std;
// sigset_t pending;
// void printf_pending()
// {
//     sigpending(&pending);
//     for(int i=31;i>=1;i--)
//     {
//        printf("%d",sigismember(&pending,i)); 
//     }
//     printf("\n");
//     fflush(stdout);

// }

// void capture_signal(int _sig)
// {
//     printf("capture signal %d \n",_sig);

// }

// int main()
// {
//     signal(2,capture_signal);
//     sigset_t temp,o_set; 
//     sigemptyset(&temp);
//     sigaddset(&temp,2);
//     sigprocmask(SIG_SETMASK,&temp,&o_set);
//     int cnt=20;
//     while(1)
//     {
//         cnt--;
//         if(cnt==0)
//             sigprocmask(SIG_SETMASK,&o_set,&temp);
//         printf_pending();
//         sleep(1);
//     }
    

// }
void handler(int sig)
{
    cout<<"get sig: "<<sig<<endl;
    pid_t pid=0;
    while((pid=waitpid(-1,nullptr,WNOHANG))>0)
    {
        cout<<"child process "<<pid<<"sucess quit"<<endl;
    }
}


int main()
{
    signal(17,handler);
    for(int i=0;i<5;i++)
    {
        pid_t id=fork();
        if(id==0)
        {
            int cnt=10;
            cout<<"i am child process "<<getpid()<<endl;
            while(cnt--)
            {
                
                sleep(1);

            }
            cout<<"child "<<getpid()<<"quilt"<<endl;
            exit(0);
        }

    }

    cout<<"i am parent process "<<getpid()<<endl;
    int sta=0;
    while(1)
    {
    //   pid_t t=waitpid(-1,&sta,0);
    //   if(t<0)
    //   {
    //     cout<<"parent quilt"<<endl;
    //     break;
    //   }
        cout<<"i am partent: "<<getpid()<<endl;
        sleep(2);
    }


    return 0;
}
